package com.atguigu.web;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;

public abstract class BaseServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    /**
     * 对登录和注册判断处理；
     * 这里表单提交到相应的Servlet程序之后，会寻找doPost方法，
     * 子类找不到父类找，之后在BaseServlet找到了，所以就
     * 无需用到BaseServlet的逻辑地址，所以就不用配
     * BaseServlet的XML了
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String action=req.getParameter("action");

//        if(action.equals("login")){//登录操作
//            login(req,resp);
//
//        } else if (action.equals("register")){//注册操作
//            register(req,resp);
//        }
        /**
         * 这里运用反射可使得程序更加简洁；
         * 如果功能不知注册和登录，还有别的几十个功能，用if-else的话就太繁琐了
         * 【重启电脑记得设置mysql时区，不然程序会一直等待】
         */
        try {
            Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class);
            //this代表本类的实例；
            method.setAccessible(true);
            method.invoke(this,req,resp);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);//把异常抛给filter过滤器
        }

    }
}
